#include <stdio.h>
#include <stdlib.h>
#include "simplex.h"
#include "grafo.h"

int *Y;
struct vertice{
  int custo;
  int custo_artificial;
};

void simplex_network (int numero_de_nos,
                      int v_origem,
                      int v_destino,
                      int *arvore,
                      int tam_arvore,
                      vertice **grafo){

    int i, j, cij = 0;
    Y = calloc(numero_de_nos+2, sizeof(int));
    Y[v_destino] = 0;
    for(i = 1; i < numero_de_nos; i++){
        Y[arvore[i]] = Y[arvore[i-1]] - grafo[arvore[i]][arvore[i-1]].custo;
    }

    for(i = 0; i < numero_de_nos; i++){
        printf("%d ", Y[i]);
    }
    printf("\n");
    for(i = numero_de_nos-1; i >= 0; i--){
        if(Y[i] == 0 && i != v_destino){
            for(j = numero_de_nos-1; j > 0; j--){
                if(grafo[i][j].custo_artificial == 0){
                    if(Y[j] != 0 || j == v_destino){
                        Y[i] = Y[j] - grafo[i][j].custo;
                        break;
                    }
                }
            }
        }
    }

    for(i = 0; i < numero_de_nos; i++){
        for(j = 0; j < numero_de_nos; j++){
            if(grafo[i][j].custo_artificial == 0){
                cij = grafo[i][j].custo + Y[i] - Y[j];
                if(cij < 0 && (search_node(j, arvore, tam_arvore))){
                        printf("\n\tO arco %d %d deve entrar na base\n", i, j);
                }
            }
        }
    }


    for(i = 0; i < numero_de_nos; i++){
        printf("%d ", Y[i]);
    }
}
